package com.liezh.singletons;

/**
 * 利用jvm类加载阶段，classloder 机制来保证初始化 instance 时只有一个线程，保证线程安全。
 *
 *  StaticInnerClassSingleton 类被装载了，rpcClient 不一定被初始化；
 *  因为 RpcClientHolder 类没有被主动使用，只有显示通过调用 getRpcClient方法时，
 *  才会装载 RpcClientHolder 类，从而实例化 rpcClient。
 * @author liezh
 * @date 2021-8-31
 */
public class StaticInnerClassSingleton extends RpcClient {

    private StaticInnerClassSingleton() {}
    private StaticInnerClassSingleton(String ip, String port, int poolSize, int timeout) {
        super(ip, port, poolSize, timeout);
    }
    public static void main(String[] args) {
        final RpcClient rpcClient = StaticInnerClassSingleton.getInstance();
        rpcClient.send("hello world!!!");

    }

    private static class RpcClientHolder {
        private static final RpcClient instance = new StaticInnerClassSingleton("127.0.0.1", "10010", 5, 5000);

    }

    public static RpcClient getInstance() {
        return RpcClientHolder.instance;
    }
}
